package newxx.itheima.cn.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @author U md5 的工具类
 */
public class MD5Utils {

	/**
	 * @param msg
	 * @return 对字符串进行取摘要
	 */
	public static String md5(String msg) {
		try {
			MessageDigest digest = MessageDigest.getInstance("MD5");
			byte[] bytes = digest.digest(msg.getBytes());// 8位：127-（-128）
			StringBuilder sb = new StringBuilder();
			for (byte b : bytes) {// b：1111 1111（-128）---255
				int i = (b & 0xff);// 加盐 高8位 1111 1111 & 1111 1111 --->int 0000
									// 0000 0000 0000 0000 0000 1111 1111 255
				// 16 进制 --->二进制 0xff--->1111 1111 0xee 1110 1110(8 4 2 1) 0xdd
				// 1101 1101
				// 转换成16进制
				String hex = Integer.toHexString(i);
//				System.out.println(hex);
				if (hex.length() == 1) {
					hex = "0" + hex;
				}
				sb.append(hex);
			}
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * @param is
	 * @return 对一个流进行加密
	 */
	public static String md5(InputStream is) {
		MessageDigest digester;
		try {
			digester = MessageDigest.getInstance("MD5");
			byte[] bytes = new byte[8192];
			int byteCount;
			while ((byteCount = is.read(bytes)) > 0) {
				digester.update(bytes, 0, byteCount);
			}
			byte[] digest = digester.digest();
			StringBuilder sb = new StringBuilder();
			for (byte b : digest) {// b：1111 1111（-128）---255
				int i = (b & 0xff);// 加盐 高8位 1111 1111 & 1111 1111 --->int 0000
									// 0000 0000 0000 0000 0000 1111 1111 255
				// 16 进制 --->二进制 0xff--->1111 1111 0xee 1110 1110(8 4 2 1) 0xdd
				// 1101 1101
				// 转换成16进制
				String hex = Integer.toHexString(i);
//				System.out.println(hex);
				if (hex.length() == 1) {
					hex = "0" + hex;
				}
				sb.append(hex);
			}
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return null;
	}

	public static void main(String[] args) throws FileNotFoundException {
//		String str = md5("123");
		// str=md5(str);
		FileInputStream is=new FileInputStream("病毒1.apk");
		String str=md5(is);
		System.out.println(str);
	}
}
